package cyx.example.ddd.application.order.query;

import cyx.example.ddd.application.order.dto.OrderDTO;
import cyx.example.ddd.application.order.dto.OrderStatisticsDTO;

import java.time.LocalDate;
import java.util.List;
import java.util.Optional;

/**
 * 订单查询仓储接口
 * 专门处理订单相关的查询操作，实现CQRS模式
 */
public interface OrderQueryRepository {

    /**
     * 根据ID查询订单
     */
    Optional<OrderDTO> findById(String orderId);

    /**
     * 根据用户ID查询订单列表
     */
    List<OrderDTO> findByUserId(String userId);

    /**
     * 根据条件查询订单列表
     */
    List<OrderDTO> findByConditions(OrderQuery query);

    /**
     * 分页查询订单
     */
    OrderPageResult findByPage(OrderPageQuery pageQuery);

    /**
     * 获取订单统计信息
     */
    OrderStatisticsDTO getStatistics(LocalDate startDate, LocalDate endDate);
}